package com.leetcode;

import java.util.Arrays;

/**
 * 面试题 05.02. 二进制数转字符串 (中等)
 * 二进制数转字符串。给定一个介于0和1之间的实数（如0.72），类型为double，打印它的二进制表达式。如果该数字无法精确地用32位以内的二进制表示，则打印“ERROR”。
 * 32位包括输出中的 "0." 这两位。
 */
public class LeetCodeMS0502 {

    public static void main(String[] arg0) {
        double num = 0.625;
        System.out.println("0到1之间小数 " + num + " 的二进制表达式 = " + printBin(num));
    }

    /**
     * 小数转二进制的方法，乘 2 取整数部分拼接，后面的小数部分继续乘 2 取整数循环
     */
    public static String printBin(double num) {
        String res = "ERROR";
        if (num > 0 && num < 1) {
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.append("0.");
            while (stringBuilder.length() <= 32 && num != 0) {
                num = num * 2;
                int di = (int) num;
                stringBuilder.append(di);
                num = num - di;
            }
            if (stringBuilder.length() <= 32) {
                res = stringBuilder.toString();
            }
        }
        return res;
    }

}
